package org.hyl.javabase.泛型;

import java.util.ArrayList;
import java.util.List;

public class demo2 {
	public static void main(String[] args) {
		fun1();
		// fun2();
		// fun3();
	}

	public static  <Tobj> void out1(Tobj t) {
		System.out.println(t);
	}
	

	public static  <T>  void out(T t) {
		System.out.println(t);
	}
	public static void fun1() {
		out("findingsea");
		out(123);
		out(11.11);
		out(true);
	}
	public static <T> void out(T... args) {
		for (T t : args) {
			System.out.println(t);
		}
	}
	public static void fun2() {
		out("findingsea", 123, 11.11, true);
	}

	// 泛型方法 printArray
	public static <E> void printArray(E[] inputArray) {
		// 输出数组元素
		for (E element : inputArray) {
			System.out.printf("%s %s", element,"zxd");
		}
		System.out.println();
	}

	public static void fun3() {
		// 创建不同类型数组： Integer, Double 和 Character
		Integer[] intArray = { 1, 2, 3, 4, 5 };
		Double[] doubleArray = { 1.1, 2.2, 3.3, 4.4 };
		Character[] charArray = { 'H', 'E', 'L', 'L', 'O' };

		System.out.println("整型数组元素为:");
		printArray(intArray); // 传递一个整型数组

		System.out.println("\n双精度型数组元素为:");
		printArray(doubleArray); // 传递一个双精度型数组

		System.out.println("\n字符型数组元素为:");
		printArray(charArray); // 传递一个字符型数组
	}
	// 比较三个值并返回最大值
	public static  Object maximum(Object x, Object y, Object z) {
		Object max = x; // 假设x是初始最大

		return max; // 返回最大对象
//		String;
//		Float;
//		Integer;
		//compareTo

	}
    
	// 比较三个值并返回最大值
	public static <T extends Comparable<T>> T maximum(T x, T y, T z) {
		T max = x; // 假设x是初始最大值
		if (y.compareTo(max) > 0) {
			max = y; // y 更大
		}
		if (z.compareTo(max) > 0) {
			max = z; // 现在 z 更大
		}
		return max; // 返回最大对象

	}

	public static void fun4() {
		System.out.printf("%d, %d 和 %d 中最大的数为 %d\n\n", 3, 4, 5, maximum(3, 4, 5));

		System.out.printf("%.1f, %.1f 和 %.1f 中最大的数为 %.1f\n\n", 6.6, 1, 7.7, maximum(6.6, 1, 7.7));

		System.out.printf("%s, %s 和 %s 中最大的数为 %s\n", "pear", "apple", "orange", maximum("pear", 1, "orange"));
	}
	
	public static <T> String getData1(List<T> data) {
		System.out.println("data :" + data.get(0));
		return "ok";
	}
	//？是默认的泛型通配符
	public static void getData(List<?> data) {
		System.out.println("data :" + data.get(0));
	}
	//好处是？可以继承某个类
	public static void getUperNumber(List<? extends Number> data) {
		System.out.println("data :" + data.get(0));
	}
	public static void fun5() {
		List<String> name = new ArrayList<String>();
		List<Integer> age = new ArrayList<Integer>();
		List<Number> number = new ArrayList<Number>();

		name.add("icon");
		age.add(18);
		number.add(314);

		getData(name);
		getData(age);
		getData(number);

	}

	
}
